import multiprocessing
def fibonacci(n):    #计算斐波那契数列的第n项
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        a, b = 0, 1
        for _ in range(2, n + 1):
            a, b = b, a + b
        return b
def worker(task_queue, result_dict):#工作进程函数，从任务队列获取n值，计算斐波那契数并将结果存入字典
    while True:
        n = task_queue.get()
        if n is None:  # 结束信号
            break
        result_dict[n] = fibonacci(n)
        task_queue.task_done()

if __name__ == "__main__":
    m =input("请输入n：")
    n=int(m)
    task_queue = multiprocessing.JoinableQueue()    # 创建任务队列和结果字典
    result_dict = multiprocessing.Manager().dict()  # 使用Manager().dict()创建一个可在进程间共享的字典
    num_processes = multiprocessing.cpu_count()    # 确定进程数量（使用CPU核心数）
    processes = []# 启动工作进程
    for _ in range(num_processes):
        p = multiprocessing.Process(target=worker, args=(task_queue, result_dict))
        p.daemon = True
        p.start()
        processes.append(p)
    for i in range(n):# 添加任务到队列
        task_queue.put(i)
    task_queue.join()# 等待所有任务完成
    for _ in range(num_processes):# 发送结束信号给所有工作进程
        task_queue.put(None)
    for p in processes:# 等待所有进程结束
        p.join()
    fib_sequence = [result_dict[i] for i in range(n)]# 按顺序输出结果
    print(f"斐波那契数列的前 {n} 项:")
    print(fib_sequence)
